package com.youyi.utils;

import com.sun.xml.internal.ws.util.StringUtils;

import java.util.regex.Pattern;

/**
 * @author youyi.time
 * @date 2024/11/19 17:41
 */
public class StringBaseUtils {


    private static final char SPACE = ' '; //空格
    private static final String EMPTY_STR = ""; // 空字符

    /**
     * 正则表达式
     */
    public static final String EMAIL_REGEX = "^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+$"; //电子邮箱正则
    public static final String CHINA_PHONE_REGEX = "^1[3-9]\\d{9}$"; //中国手机号正则
    public static final String URL_REGEX = "^(http|https)://[a-zA-Z0-9.-]+(\\/[a-zA-Z0-9%_.-]*)*$"; //网址正则
    public static final String NUMBER_REGEX = "^\\d+$"; //纯数字正则
    //可以用来验证一个密码是否至少包含一个数字、一个小写字母、一个大写字母、一个特殊字符，并且长度在于8到20个字符。
    public static final String STRONG_PASSWORD_REGEX = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])(?=\\S+$).{8,20}$";
    public static final String IP_REGEX = "^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$"; // 验证IP地址


    /**
     * 判断是否为空
     * @param cs
     * @return
     */
    public static boolean isEmpty(CharSequence cs){
        return cs == null || cs.length() == 0;
    }

    /**
     * 判断是否不为空
     * @param cs
     * @return
     */
    public static boolean isNotEmpty(CharSequence cs){
        return !isEmpty(cs);
    }

    /**
     * 是否包含指定字符串
     * @return
     */
    public static boolean isContainStr(CharSequence parent , CharSequence child){
        if(isEmpty(parent) && isEmpty(child)) return false;
        // 使用 CharSequence 的子类特性，避免多次 toString 转换
        if (parent instanceof String && child instanceof String) {
            return ((String) parent).contains((String) child);
        }
        // 使用 indexOf 方法进行查找
        return parent.toString().indexOf(child.toString()) != -1;
    }

    /**
     * 删除字符两边空格
     * @param cs
     * @return
     */
    public static String trim(CharSequence cs){
        if(isEmpty(cs)) return EMPTY_STR;
        int start = 0 , end = cs.length()-1;
        while(start <= end && cs.charAt(start) == SPACE) start++;
        while(start <= end && cs.charAt(end) == SPACE) end--;
        if(start > end) return  EMPTY_STR; //说明全是空格
        return cs.subSequence(start,end+1).toString();

    }

    /**
     * 是否匹配正则表单式
     * @param input 匹配内容
     * @param regex 正则表带是
     * @return
     */
    public static boolean isMatchRegex(String input , String regex){
        if(isEmpty(input) || isEmpty(regex)) return false;
        return Pattern.compile(regex).matcher(input).matches();
    }

}
